package br.ufes.ceunes.poo.model.dao;

import br.ufes.ceunes.poo.model.pojo.Produto;
import br.ufes.ceunes.poo.util.JPAUtil;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

public class ProdutoDAO implements DAOGenerico<Produto, Integer> {

    @Override
    public void salvar(Produto objeto) {
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        em.persist(objeto);
        tx.commit();
        em.close();
    }

    @Override
    public void remover(Produto objeto) {
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        em.remove(objeto);
        tx.commit();
        em.close();
    }

    @Override
    public List<Produto> listar() {
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        Query query = em.createQuery("select p from Produto p", Produto.class);
        return query.getResultList();
    }

    public List<Produto> buscaPorNome(String nome) {
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        Query query = em.createQuery("select produto from Produto produto where"
                + " produto.nome like '%" + nome + "%'", Produto.class);
        List result = query.getResultList();
        em.close();
        return result;
    }

    @Override
    public Produto buscarPorId(Integer id) {
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        Produto produto = em.find(Produto.class, id);
        em.close();
        return produto;
    }

}
